import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) throws SQLException {
        /**
         * 使用 JDBC 往数据库中插入一个记录
         * 需要提前准备好数据库(java106) 和 数据表(student)
         */

        // 1.创建数据源，描述了数据库服务器在哪
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("panjialie1218");

        // 2.和数据库建立网络连接 (写JDBC实际上是实现一个MySQL客户端，通过网络和服务器进行通讯)
        Connection connection = dataSource.getConnection();

        // 3.输入学号和姓名
        System.out.println("请输入学号：");
        Scanner sc1 = new Scanner(System.in);
        int id = sc1.nextInt();
        System.out.println("请输入姓名：");
        Scanner sc2 = new Scanner(System.in);
        String name = sc2.next();

        // 4.构造一个 SQL 语句，来完成插入操作
        //String sql = "insert into student values (1, 'zhansan')";     -- 太死板
        //String sql = "insert into student values (" + id + ", '" + name + "')";   -- 会SQL注入攻击
        String sql = "insert into student values (?, ?)";       //通过占位符进行替换
        // jdbc中还需要搭配一个特定的对象，来搭配描述这里的sql情况
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        statement.setString(2, name);

        // 5.执行 SQL 语句 (控制客户端给服务器发送请求)
        int ret = statement.executeUpdate();
        System.out.println("ret = " + ret);

        // 6.断开和数据库的连接，并且释放掉必要的资源
        statement.close();
        connection.close();
    }
}
